home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Resources / Internet / Maxthon 1.5.7 build 82 / mcombo.exe / Template / StartPage / js / ajax.js next >
Text File  |  2006-09-14  |  7KB  |  193 lines

  1. ////////////////////////////////////////////////////////////////////////
  2. // Simple Ajax Call Object
  3. ////////////////////////////////////////////////////////////////////////
  4. //
  5. // Version: 1.8
  6. // Author: SiC
  7. // Last Modified: 2005-12-13 18:04:07
  8. ////////////////////////////////////////////////////////////////////////
  9.  
  10. var simpleAjax={
  11.  
  12.   // Member Variables
  13.   error: null,
  14.   arrXMLHTTP: {},
  15.   result: {},
  16.  
  17.   // *** Get a XMLHTTP object ***
  18.   getXMLHTTP: function(){
  19.     var objXMLHTTP;
  20.     try{
  21.       objXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
  22.     }catch(e){
  23.       this.error = e;
  24.       return null;
  25.     }
  26.     return objXMLHTTP;
  27.   },
  28.  
  29.   // *** Get a XMLDOM object ***
  30.   getXMLDOM: function(){
  31.     var objXMLDOM;
  32.     try{
  33.       objXMLDOM = new ActiveXObject("Microsoft.XMLDOM");
  34.       objXMLDOM.async = false;
  35.     }catch(e){
  36.       this.error = e;
  37.       return null;
  38.     }
  39.     return objXMLDOM;
  40.   },
  41.  
  42.   // *** A Daemon function to pass paramters for event handler ***
  43.   callDaemon: function(func,context, id, callBackFunc, responseType){
  44.     return function(){ func(context, id, callBackFunc, responseType); }
  45.   },
  46.  
  47.   // *** Load content from remote url via XMLDOM ***
  48.   // id: can be string or number, to indentify this call when callback
  49.   // url: target url of this call
  50.   // callBackFunc: the callback function handle
  51.   //               callBackFunc(id, result, errorCode, errorText)
  52.   //               id: the id of this call
  53.   //               result: response text or xml of remote server
  54.   //               errorCode: parse error code of XMLDOM
  55.   //               errorText: description of error
  56.   // responseType: response content mode (optional, default is 0)
  57.   //       0 - xml (raw xml text, must be valid)
  58.   //       1 - text (if the remote xml file contains xsl link, the text will be the transformed result)
  59.   load: function(id, url, callBackFunc, responseType){
  60.     if(responseType==undefined) responseType=0;
  61.  
  62.     if(!this.arrXMLHTTP[id]){
  63.       this.arrXMLHTTP[id]=this.getXMLDOM();
  64.       if(!this.arrXMLHTTP[id]) return false;
  65.     }
  66.  
  67.     this.arrXMLHTTP[id].async=true;
  68.     this.arrXMLHTTP[id].onreadystatechange = this.callDaemon(this.readyStateCheckXMLDOM, this, id, callBackFunc, responseType);
  69.  
  70.     try{
  71.       this.arrXMLHTTP[id].load(url);
  72.     }catch(e){
  73.       this.error = e;
  74.       return false;
  75.     }
  76.  
  77.     return true;
  78.   },
  79.  
  80.   // *** Check ready state for XMLDOM***
  81.   readyStateCheckXMLDOM: function(context, id, callBackFunc, responseType){
  82.     if(context.arrXMLHTTP[id].readyState!=4) return;
  83.  
  84.     if(responseType==0){
  85.       context.result[id]=context.arrXMLHTTP[id].xml;
  86.     }else if(responseType==1){
  87.       context.result[id]=context.arrXMLHTTP[id].text;
  88.     }
  89.  
  90.     callBackFunc(id,
  91.       (context.arrXMLHTTP[id].parseError.errorCode==0 ? true : false),
  92.       context.arrXMLHTTP[id].parseError.errorCode,
  93.       context.arrXMLHTTP[id].parseError.reason);
  94.  
  95.     context.arrXMLHTTP[id].onreadystatechange = function(){};
  96.     context.arrXMLHTTP[id]=null;
  97.   },
  98.  
  99.   // *** Make a GET request via XMLHTTP and get the response ***
  100.   get: function(id, url, callBackFunc, arrParams){
  101.     return this.call(id, url, "GET", "", callBackFunc, arrParams);
  102.   },
  103.  
  104.   // *** Make a POST request via XMLHTTP and get the response ***
  105.   post: function(id, url, strRequest, callBackFunc, responseType){
  106.     return this.call(id, url, "POST", strRequest, callBackFunc, arrParams);
  107.   }, 
  108.  
  109.   // *** Make a call with XMLHTTP ***
  110.   // {id} can be string or number, to indentify this call when callback
  111.   // {url} target url of this call
  112.   // {callMethod} can be "GET" or "POST"
  113.   // {strRequest} the request content sent to remote server, only for "POST" method
  114.   // {callBackFunc} the callback function handle
  115.   //               callBackFunc(id, result, status, statusText)
  116.   //               id: the id of this call
  117.   //               result: response text or xml of remote server
  118.   //               status: final status code of XMLHTTP
  119.   //               statusText: description of status
  120.   // {arrParams} a struct contains extra parameters
  121.   // ->responseType: response content mode (optional, default is 0)
  122.   //       0 - plain text
  123.   //       1 - xml (XMLHTTP will automatically convert the content into Unicode)
  124.   //       2 - stream (if you want to get the raw data for XMLDOM etc.)
  125.   // ->requestHeaders: an Array of custom headers for this call
  126.   call: function(id, url, callMethod, strRequest, callBackFunc, arrParams){
  127.  
  128.     if(!arrParams['responseType']) arrParams['responseType']=0;
  129.     if(callMethod!="POST"){
  130.       callMethod="GET";
  131.       strRequest="";
  132.     }
  133.  
  134.     if(!this.arrXMLHTTP[id]){
  135.       this.arrXMLHTTP[id]=this.getXMLHTTP();
  136.       if(!this.arrXMLHTTP[id]) return false;
  137.     }
  138.  
  139.     this.arrXMLHTTP[id].onreadystatechange = this.callDaemon(this.readyStateCheckXMLHTTP, this, id, callBackFunc, arrParams['responseType']);
  140.  
  141.     if(arrParams['requestHeaders']){
  142.       for(var i=0;i<arrParams['requestHeaders'].length;i++){
  143.         this.arrXMLHTTP[id].setRequestHeader(arrParams['requestHeaders'][i][0],arrParams['requestHeaders'][i][1]);
  144.       }
  145.     }
  146.  
  147.     try{
  148.       this.arrXMLHTTP[id].open(callMethod, url, true);
  149.       this.arrXMLHTTP[id].send(strRequest);
  150.     }catch(e){
  151.       this.error = e;
  152.       return false;
  153.     }
  154.  
  155.     return true;
  156.   },
  157.  
  158.   // *** Check ready state for XMLHTTP***
  159.   readyStateCheckXMLHTTP: function(context, id, callBackFunc, responseType){
  160.     if(context.arrXMLHTTP[id].readyState!=4) return;
  161.  
  162.     if(responseType==0){
  163.       context.result[id]=context.arrXMLHTTP[id].responseText;
  164.     }else if(responseType==1){
  165.       context.result[id]=context.arrXMLHTTP[id].responseXML.xml;
  166.     }else{
  167.       context.result[id]=context.arrXMLHTTP[id].responseStream;
  168.     }
  169.     
  170.     callBackFunc(id,
  171.       (context.arrXMLHTTP[id].status==200 ? true : false),
  172.       context.arrXMLHTTP[id].status,
  173.       context.arrXMLHTTP[id].statusText);
  174.  
  175.     context.arrXMLHTTP[id].onreadystatechange=function(){};
  176.     context.arrXMLHTTP[id]=null;
  177.   },
  178.  
  179.   // *** Clean up to avoid memory leak ***
  180.   cleanUp: function(){
  181.     for(var id in this.arrXMLHTTP){
  182.       this.arrXMLHTTP[id].abort();
  183.       this.arrXMLHTTP[id].onreadystatechange=function(){};
  184.       this.arrXMLHTTP[id]=null;
  185.     }
  186.     for(var id in this.result){
  187.       this.result[id]=null;
  188.     }
  189.   }
  190. }
  191.  
  192. // Avoid IE memory leak
  193. window.attachEvent("onunload",simpleAjax.cleanUp);